package persistencia;

import clases.SolicitudAmistad;
import clases.Relacion;
import java.sql.*;
import clases.Usuario;
import java.util.ArrayList;

/**
 *
 * @author JAVA
 */
import java.sql.*;
import controlador.*;
import Util.*;
import java.util.List;
import java.util.Collection;

public class PersistenciaAmigos {

    public static void altaAmistad(String usuarioAmigo, String usuario) {

        long lAhora = System.currentTimeMillis();
        Date d = new Date(lAhora);
        String fecha = Util.UtilFecha.fechaMySQL(d);

        Connection con = null;

        String sql = "UPDATE  amigos SET usuarioAmigo = '" + usuarioAmigo + "' "
                + "fechaRelacion='" + fecha + "' usuario=" + usuario + "estado='alta'";

        try {

            PersistenciaConexion.crearConexion();
            Statement st = con.createStatement();
            ResultSet rs = st.executeQuery(sql);
            int rowcount = st.executeUpdate(sql);

        } catch (Exception e) {
            System.out.println("ERROR");

        } finally {
            PersistenciaConexion.cerrarConexion(con);
        }
    }

    /**
     * Obtiene una Lista con amigos de un usuario, pasandole su nick
     * @author Rafa
     */
    public static List<Usuario> consultaAmigos(String nick) {
        String sql = "select usuarioAmigo from amigos where usuario ='" + nick + "'";
        Connection con = null;
        List<Usuario> listaAmigos = new ArrayList<Usuario>();
        try {
            con = PersistenciaConexion.crearConexion();
            Statement st = con.createStatement();
            ResultSet rs = st.executeQuery(sql);
            while (rs.next()) {
                Usuario usu = new Usuario();
                usu = PersistenciaUsuario.cargaUsuario(rs.getString("usuarioAmigo"));
                //annadimos amigo a la lista
                listaAmigos.add(usu);
            }

        } catch (Exception e) {
            System.out.println("Error a obtener la pelicula " + e.getMessage());
        }
        PersistenciaConexion.cerrarConexion(con);
        return listaAmigos;
    }

    public static Collection<Relacion> consultaRelaciones(String nick) {
        String sql = "select * from amigos where usuario ='" + nick + "'";
        Connection con = null;
        Collection<Relacion> listaRelaciones = new ArrayList();
        try {
            con = PersistenciaConexion.crearConexion();
            Statement st = con.createStatement();
            ResultSet rs = st.executeQuery(sql);
            while (rs.next()) {
                Relacion rel = new Relacion();
                rel.setUsuario(PersistenciaUsuario.cargaUsuario(rs.getString("usuarioAmigo")));
                rel.setFechaRelacion(rs.getDate("fechaRelacion"));

                listaRelaciones.add(rel);
            }

        } catch (Exception e) {
            System.out.println("Error a obtener la pelicula " + e.getMessage());
        }
        PersistenciaConexion.cerrarConexion(con);
        return listaRelaciones;
    }

    public static void bajaAmistad(String usuarioAmigo) {

        Connection con = null;
        Statement st = null;

        try {
            con = PersistenciaConexion.crearConexion();
            st = con.createStatement();
            //ResultSet rs = st.executeQuery(sql);

            int rowcount = st.executeUpdate("UPDATE  amigos SET estado='baja' "
                    + "WHERE usuarioAmigo='" + usuarioAmigo + "'");
        } catch (Exception e) {
            System.out.println("ERROR");

        } finally {
            PersistenciaConexion.cerrarConexion(con);
        }
    }

    public static Collection<SolicitudAmistad> cargarSolicitudesAmistad(String nick, String tipo) {
        String sql = "";
        if (tipo.equals("enviadas")) {
            sql = "select * from amistades where usuEmisor ='" + nick + "' and estado='PENDIENTE'";
        }
        if (tipo.equals("recibidas")) {
            sql = "select * from amistades where usuReceptor ='" + nick + "' and estado='PENDIENTE'";
        }

        Connection con = null;
        Collection<SolicitudAmistad> listaSolicitudesAmistad = new ArrayList();
        try {
            con = PersistenciaConexion.crearConexion();
            Statement st = con.createStatement();
            ResultSet rs = st.executeQuery(sql);
            while (rs.next()) {
                SolicitudAmistad solAmistad = new SolicitudAmistad();

                if (tipo.equals("enviadas")) {
                    solAmistad.setUsuReceptor(PersistenciaUsuario.cargaUsuario(rs.getString("usuReceptor")));
                }
                if (tipo.equals("recibidas")) {
                    solAmistad.setUsuReceptor(PersistenciaUsuario.cargaUsuario(rs.getString("usuEmisor")));
                }

                solAmistad.setFechaPeticion(rs.getDate("fechaPeticion"));
                solAmistad.setFechaAceptacion(rs.getDate("fechaAceptacion"));
                solAmistad.setEstado(rs.getString("estado"));

                listaSolicitudesAmistad.add(solAmistad);
            }

        } catch (Exception e) {
            System.out.println("Error a obtener la pelicula " + e.getMessage());
        }
        PersistenciaConexion.cerrarConexion(con);
        return listaSolicitudesAmistad;

    }

    public static boolean EsAmigo(String nickUsuario, String nickAmigo) {
        boolean dev = false;
        String sql = "select usuario from amigos where usuario = '" + nickUsuario + "' and usuarioAmigo= '" + nickAmigo + "'";
        Connection con = null;
        Statement st = null;
        ResultSet rs = null;

        try {
            con = PersistenciaConexion.crearConexion();
            st = con.createStatement();
            rs = st.executeQuery(sql);

            if (rs.next()) {
                dev = true;
            }
        } catch (Exception e) {
            System.out.println("[!] Error al comprobar si existe amistad " + e.getMessage());
        }
        PersistenciaConexion.cerrarConexion(con);

        return dev;
    }

    public static void insertarSolicitudAmistad(Usuario usu, SolicitudAmistad solAmistad) {

        Connection con = null;
        Statement st = null;


        String sql = "INSERT INTO amistades (usuEmisor, usuReceptor, fechaPeticion, estado) VALUES ('";
        sql += usu.getUsuario();
        sql += "','";
        sql += solAmistad.getUsuReceptor().getUsuario();
        sql += "','";
        sql += UtilFecha.fechaMySQL(solAmistad.getFechaPeticion());
        sql += "','";
        sql += solAmistad.getEstado();
        sql += "')";

        try {
            con = PersistenciaConexion.crearConexion();
            st = con.createStatement();
            int rowcount = st.executeUpdate(sql);

        } catch (Exception e) {
            System.out.println("ERROR");

        } finally {
            PersistenciaConexion.cerrarConexion(con);
        }
    }

    public static void aceptarSolicitudAmistad(String emisor, String receptor) {
        Connection con = null;
        Statement st = null;

        long lAhora = System.currentTimeMillis();
        Date d = new Date(lAhora);
        String fecha = Util.UtilFecha.fechaMySQL(d);

        String sql = "UPDATE amistades SET estado='ACEPTADA', fechaAceptacion='" + fecha + "' WHERE usuEmisor='" + emisor + "' AND usuReceptor='" + receptor + "';";

        try {
            con = PersistenciaConexion.crearConexion();
            st = con.createStatement();
            int rowcount = st.executeUpdate(sql);

        } catch (Exception e) {
            System.out.println("ERROR");

        } finally {
            PersistenciaConexion.cerrarConexion(con);
        }
    }

    public static void rechazarSolicitudAmistad(String emisor, String receptor) {
    }

    public static boolean existeAmistad(String nickUsuario, String nickAmigo) {
        boolean dev = false;
        String sql = "select usuEmisor from amistades where usuEmisor = '" + nickUsuario + "' and usuReceptor= '" + nickAmigo + "'";
        Connection con = null;
        Statement st = null;
        ResultSet rs = null;

        try {
            con = PersistenciaConexion.crearConexion();
            st = con.createStatement();
            rs = st.executeQuery(sql);

            if (rs.next()) {
                dev = true;
            }
        } catch (Exception e) {
            System.out.println("[!] Error al comprobar si existe amistad " + e.getMessage());
        }
        PersistenciaConexion.cerrarConexion(con);

        return dev;
    }

    public static void insertarAmistad(String usuEmisor, String usuReceptor) {

        Connection con = null;
        Statement st = null;

        long lAhora = System.currentTimeMillis();
        Date d = new Date(lAhora);
        String fecha = Util.UtilFecha.fechaMySQL(d);

        String sql = "INSERT INTO amigos (usuarioAmigo, usuario, fechaRelacion, estado) VALUES ('";
        sql += usuEmisor;
        sql += "','";
        sql += usuReceptor;
        sql += "','";
        sql += fecha;
        sql += "','";
        sql += "alta";
        sql += "')";

        try {
            con = PersistenciaConexion.crearConexion();
            st = con.createStatement();
            int rowcount = st.executeUpdate(sql);

        } catch (Exception e) {
            System.out.println("ERROR");

        } finally {
            PersistenciaConexion.cerrarConexion(con);
        }
    }
}
